Spring Cloud-使用高性能的OkHttp库

前言

最近在做项目优化,研究了Spring Cloud底层源码,Http请求库默认是Apache HttpClient或者JDK自带的HttpURLConnection库.Java标准库提供了HttpURLConnection类来支持HTTP通讯。不过HttpURLConnection本身的API不够友好,所提供的功能也有限。大部分Java程序都选择使用Apache的开源项目HttpClient作为HTTP客户端。ApacheHttpClient库的功能强大,使用率也很高,基本上是Java平台中事实上的标准HTTP客户端,但是做Android的小伙伴早已经淘汰该库了,就是因为其API数量过多过于繁重,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,因而团队不愿意去维护该库.本章介绍的是由 Square 公司开发的OkHttp,是一个专注于性能和易用性的 HTTP 客户端。
OkHttp 库的设计和实现的首要目标是高效.支持SPDY,,可以合并多个到同一个主机的请求, 使用连接池技术减少请求的延迟(如果SPDY是可用的话),使用GZIP压缩减少传输的数据量,缓存响应避免重复的网络请求,当网络出现问题时,OkHttp 会自动重试一个主机的多个IP地址。

OkHttp在Zuul中的应用

话说至此,有些人可能又疑问?我怎么知道默认底层用的是的Apache Client?
我在公司负责Zuul网关模块,Zuul的动态路由转发用Ribbon调用.查看官方文档,如下:

ES6新的数据类型-generator

新的数据类型-generator

generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次.
ES6定义generator标准的哥们借鉴了Python的generator的概念和语法.
我们先复习函数的概念。一个函数是一段完整的代码,调用一个函数就是传入参数,然后返回结果:

箭头函数

箭头函数

ES6标准新增了一种新的函数:Arrow Function(箭头函数)。
为什么叫Arrow Function?因为它的定义用的就是一个箭头:

1
2
var fn = x => x * x;
alert(fn(5)); //25

闭包

函数作为返回值

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
我们来实现一个对Array的求和。通常情况下,求和的函数是这样定义的:

1
2
3
4
5
6
function sum(arr) {
return arr.reduce(function (x, y) {
return x + y;
});
}
sum([1, 2, 3, 4, 5]); // 15

高阶函数

高阶函数概述

高阶函数英文叫Higher-order function。那么什么是高阶函数?
JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
一个最简单的高阶函数:

JS方法

对象的方法

在一个对象中绑定函数,称为这个对象的方法。
在JavaScript中,对象的定义是这样的:

1
2
3
4
var xiaoming = {
name: '小明',
birth: 1990
};

变量作用域与解构赋值

变量作用域

在JavaScript中,用var申明的变量实际上是有作用域的。
如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量:

1
2
3
4
5
function foo() {
var x = 1;
x = x + 1;
}
x = x + 2; // ReferenceError! 无法在函数体外引用变量x

JS函数定义和调用

定义函数

JavaScript函数时参数化的,并且每次调用还会有个上下文(this关键字).如果函数挂载在一个对象上,作为对象的一个属性,那就是对象的方法.
JS的函数可以嵌套在其他函数中定义,这样它们就可以访问它们被定义时所处的作用域中的任何遍历.这意味着JS函数构成了一个闭包(closure).
在JavaScript中,定义函数的方式如下:

Markdown 语法入门

Markdown


导语:

Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。

一、Markdown 文档

Markdown 中文版语法说明
markdown语法实例

二、常用的语法规则

文中所提到的快捷键仅限 Mou 软件中使用,部分语法「简书」可能不支持。建议每个符号和文字之间留有一个空格